package chapter10.section5;

/*程序10-5:将一个目录下的文件转移至另外一个目录的程序*/

import java.io.File;

public class FileMove {
    public static void main(String[] args) throws Exception {
        // 判断参数是否完整，此程序运行需要指定两个参数，一个是源目录，一个是目的地
        if (args.length != 2) {
            System.out.println("用法: filemove 源目录 目的目录");
            System.exit(0); // 缺失参数，终止程序运行
        }
        File in = new File(args[0]); // 根据第一个源目录创建File对象
        File dest = new File(args[1]); // 根据第二个目的地创建File对象
        File tmp = null; // 用作临时对象
        // 如果源目录不存在，抛出一个异常
        if (!in.exists()) {
            throw new Exception("源目录不存在：" + args[0]);
        }
        // 如果源目录不是一个有效的目录，抛出一个异常
        if (!in.isDirectory()) {
            throw new Exception(args[0] + "不是一个有效的目录");
        }
        // 如果目的地尚未被创建，则直接创建，注意选用了mkdirs而非mkdir
        if (!dest.exists()) {
            dest.mkdirs();
        }
        // 获得源目录下的所有文件，包含子目录
        File[] srcFiles = in.listFiles();
        // 开始转移文件到指定的目的地
        for (File file : srcFiles) { // 在数组中迭代
            // 如果当前的File对象是一个目录，忽略它
            if (file.isDirectory()) {
                continue;
            }
            // 创建一个新的File对象,此对象含有目的地路径和当前文件的文件名
            tmp = new File(dest, file.getName());
            // 执行文件转移
            file.renameTo(tmp);
            tmp = null;
        }
    }
}